/*
题目：翻转单词顺序
输入一个英文句子，翻转句子中单词的顺序，但单词内字符的顺序不变。为简单起见，标点符号和普通字母一样处理。
例如输入字符串"I am a student. "，则输出"student. a am I"。
https://leetcode.cn/problems/fan-zhuan-dan-ci-shun-xu-lcof
 */
public class Offer58A {
    public String reverseWords(String s) {
        int start = 0;
        int end = s.length() - 1;
        //先跳过前面的空格
        while (start < s.length() && s.charAt(start) == ' ') {
            start++;
        }
        //跳过后面的空格
        while (end >= 0 && s.charAt(end) == ' ') {
            end--;
        }

        StringBuilder sb = new StringBuilder();
        while (end >= start) {
            int index = end;
            while (end >= start && s.charAt(end) != ' ') {
                end--;
            }

            helper(s, sb, end + 1, index);

            //跳过空格
            while (end >= start && s.charAt(end) == ' ') {
                end--;
            }
            if (end >= start) {
                sb.append(" ");
            }
        }

        return sb.toString();
    }

    private void helper(String s, StringBuilder sb, int start, int end) {
        while (start <= end) {
            sb.append(s.charAt(start));
            start++;
        }
    }
}
